
HTTP 超文本傳輸協定 (全名:HyperText Transfer Protocol)
| 作者 | Meteoroid |
|---|---|
| 進度 | 完成 |
| 週次 | 2021/4 |
HTTP 簡單介紹
HTTP 概述
HTTP 是一個客戶端和伺服器端之間的請求和應答的標準,
通常使用 TCP 協定,
透過瀏覽器、網路爬蟲或其他工具,
客戶端會發起一個 HTTP 請求到伺服器指定指定埠(預設是 80),
我們稱這個客戶端為使用者代理程式(user agent),
應答的伺服器會儲存著一些資源,例如 HTML 圖像 之類的,
我們稱這個伺服器為源伺服器(origin server),
在使用者代理程式和源伺服器中間有可能會存在著中間層,
我們稱這些中間層為代理伺服器、閘道器、隧道(tunnel)。
請求的方法
此協議中共有以下八種方法:
1.GET
向指定的資源發出『顯示』請求,
GET 只應用來讀取資料,而不是被用來產生副作用(下面說明),
GET 可能會被爬蟲隨意存取。
2.HEAD
與 GET 方法一樣,差別在於伺服器不會傳回本文部分,
好處在於用這個方法可以不必傳輸全部的內容即可取得「關於該資源的訊息」。
3.POST
向指定資源提交資料,請求伺服器處理,
資料會包含在請求本文中,要注意的是,
此請求會建立新的資源或修改現有的資源。
4.PUT
向指定資源上傳其最新的內容。
5.DELETE
請求伺服器刪除 Request URL 所標示的資源。
6.TRACE
回顯伺服器收到的請求,主要用於測試或診斷。
7.OPTIONS
可使伺服器傳回該資源所支援的所有 HTTP 方法,
用 '*' 來代替資源名稱,此方法可測試伺服器功能是否正常。
8.CONNECT
預留給能夠將連接改為隧道方式的代理伺服器,常用於 SSL 加密伺服器的連結。
副作用
若多次請求的副作用與單次請求的副作用相同或者根本沒有副作用,能視為「冪等」。
OPTION TRACE 不應該會有副作用。
版本
HTTP 已經演化出許多版本,大部分都能向下兼容。
1.HTTP / 0.9
已經過時氣,它只能接受 GET 一種請求,
因為不支援其他方法,所以客戶端無法像伺服器傳遞太多訊息。
沒有在通訊中指定版本號。
2.HTTP / 1.0
第一個在通訊中指定版本號的。
3.HTTP / 1.1
預設是使用持續連接(Connection: keep-alive),
可以很好的配合代理伺服器工作,
且支援用管道方式同時傳送多個請求,
以便降低線路負載和提高傳輸速度。
跟 HTTP / 1.0 比較有以下差別
.快取處理
.頻寬最佳化及網路連結的使用
.錯誤通知的管理
.訊息在網路中的傳送
.網際網路位址的維護
.安全性及完整性
4.HTTP / 2
是 HTTP 協定的第二版,目前多數主流瀏覽器在2015年底支援了此協定。
建立一個應用層協定協商(Application-Layer Protocol Negotiation,簡稱 ALPN),
以便客戶能夠從 HTTP 協定的其他版本,
甚至非 HTTP 協定中做出選擇。
與 HTTP / 1.0 在請求方法、狀態碼、URL 等方面保持高度相容性。
通過下列方法來減少網路延遲,提高載入速度。
.對 HTTP 頭欄位(HTTP header fields)進行資料壓縮
.HTTP / 2 伺服器推廣(Server Push)
.請求管線
.修復 HTTP / 1.0 以來未修復的隊頭阻塞(Head-of-line blocking,縮寫:HOL blocking)問題
.對資料傳輸採用多路復用(Multiplexing),讓多個請求合併在同一 TCP 連接內
狀態碼
HTTP 狀態碼是用以表示網頁伺服器 HTTP 回應狀態的三位數字代碼
1xx 訊息
這類型的狀態碼代表請求已被接受,需要繼續處理。
100 Contiune
101 Switching Protocols
102 Processing
103 Early Hints
2xx 成功
這類型的狀態碼代表請求已成功被伺服器接收、理解、並接受。
200 OK
201 Created
202 Accepted
203 Non-Authoritative Information
204 No Content
205 Reset Content
206 Partial Content
207 Multi-Status
208 Already Reported
226 IM Used
3xx 重新導向
這類型的狀態碼代表需要客戶端採取進一步的操作才能完成請求。
300 Multiple Choices
301 Moved Permanently
302 Found
303 See Other
304 Not Modified
305 Use Proxy
306 Switch Proxy
307 Temporary Redirect
308 Permanent Redirect
4xx 客戶端錯誤
這類型的狀態碼代表了客戶端可能發生錯誤了,妨礙到伺服器的處理。
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Request Entity Too Large
414 Request-URI Too Long
415 Unsupported Media Type
416 Requested Range Not Satisfiable
417 Expectation Failed
418 I'm a teapot
421 Misdirected Request
422 Unprocessable Entity
423 Locked
424 Failed Dependency
425 Too Early
426 Upgrade Required
428 Precondition Required
429 Too Many Requests
431 Request Header Fields Too Large
451 Unavailable For Legal Reasons
5xx 伺服器錯誤
這類型的狀態碼代表伺服器無法完成明顯有效的請求
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported
506 Variant Also Negotiates
507 Insufficient Storage
508 Loop Detected
510 Not Extended
511 Network Authentication Required

Meteoroid